Spring Cloud Stream Overview
Spring Cloud Stream হলো একটি প্রোগ্রামিং মডেল যা মেসেজ-চালিত অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। এটি Spring Integration এবং Spring Cloud Stream এর সাহায্যে বিভিন্ন মেসেজ ব্রোকারের (যেমন Kafka, RabbitMQ) মাধ্যমে ডেটা স্ট্রিম করতে সক্ষম করে। Spring Cloud Stream, Spring Boot অ্যাপ্লিকেশনের মধ্যে Message Channels, Binders, এবং Processors ব্যবহার করে মেসেজ প্রেরণ এবং গ্রহণের কার্যপ্রণালী সহজ করে তোলে।
এই তিনটি মৌলিক ধারণা, Message Channel, Binder, এবং Processor, Spring Cloud Stream এর মূল কনসেপ্ট। এগুলির সাহায্যে আপনি মেসেজিং সিস্টেম এবং ডেটা স্ট্রিম প্রসেসিং সিস্টেম নির্মাণ করতে পারবেন।
১. Message Channel
Message Channel একটি অবজেক্ট যা একটি ডেটা স্ট্রিম (বা মেসেজ) প্রেরণ বা গ্রহণ করতে ব্যবহৃত হয়। এটি একটি অ্যাবস্ট্রাকশন লেয়ার হিসেবে কাজ করে, যা Spring Integration এর মধ্যে মেসেজ সিস্টেমের মধ্যে যোগাযোগের মাধ্যম হিসেবে কাজ করে।
Spring Cloud Stream-এ, Message Channel এর মাধ্যমে একটি মেসেজ এক স্থান থেকে অন্য স্থানে প্রেরণ করা হয়। Channel দুটি প্রধান কাজ করে:
- Input Channels - যেখানে মেসেজ গ্রহণ করা হয়।
- Output Channels - যেখানে মেসেজ প্রেরণ করা হয়।
উদাহরণ:
@Bean
public MessageChannel output() {
return new DirectChannel();
}
@Bean
public MessageChannel input() {
return new DirectChannel();
}
এখানে output() এবং input() মেসেজ চ্যানেল হিসেবে ব্যবহৃত হচ্ছে। output() চ্যানেল মেসেজ প্রেরণ করবে, এবং input() চ্যানেল মেসেজ গ্রহণ করবে।
২. Binder
Binder হলো একটি অ্যাবস্ট্রাকশন লেয়ার যা মেসেজ চ্যানেলকে একটি মেসেজ ব্রোকারের সাথে সংযুক্ত করে। Spring Cloud Stream-এর মধ্যে Binder একটি ক্লাস যা মেসেজ চ্যানেলগুলিকে একটি মেসেজ ব্রোকার (যেমন Kafka, RabbitMQ) এর সাথে কানেক্ট করে।
Binder দুইটি কাজ করে:
- মেসেজ চ্যানেলগুলোকে নির্দিষ্ট মেসেজ ব্রোকারের সাথে যুক্ত করা।
- চ্যানেলগুলির মাধ্যমে ডেটা পাঠানো এবং গ্রহণ করা।
Spring Cloud Stream বিভিন্ন মেসেজ ব্রোকার সাপোর্ট করে এবং Binder সেই ব্রোকারের সঙ্গে ইন্টিগ্রেটেড হয়ে কাজ করে। যেমন Kafka, RabbitMQ ইত্যাদি।
উদাহরণ:
@EnableBinding(Source.class) // Source class থেকে Output Channel দ্বারা Binder অটোমেটিকভাবে ব্যাবহার করা হয়
public class MessageProducer {
@Autowired
private MessageChannel output;
public void sendMessage(String message) {
output.send(MessageBuilder.withPayload(message).build());
}
}
এখানে, Source.class Spring Cloud Stream এর একটি ইন্টারফেস যা output চ্যানেল তৈরি করবে। Binder এটি Kafka বা RabbitMQ এর সাথে সংযুক্ত করবে।
Kafka Binder Configuration Example:
spring:
cloud:
stream:
bindings:
output:
destination: my-topic
binder: kafka
binders:
kafka:
type: kafka
environment:
spring:
kafka:
bootstrap-servers: localhost:9092
এখানে, spring.cloud.stream.bindings.output.destination এর মাধ্যমে my-topic নামক একটি Kafka টপিকের সাথে মেসেজ চ্যানেল যুক্ত করা হয়েছে।
৩. Processor
Processor হলো Spring Cloud Stream এর একটি কাস্টম ইন্টারফেস যা মেসেজ প্রক্রিয়া করার জন্য ব্যবহৃত হয়। একটি Processor হলো একটি @StreamListener এর মতো, কিন্তু এটি মেসেজকে একটি চ্যানেল থেকে নিয়ে অন্য একটি চ্যানেলে প্রেরণ করে। এতে ইনপুট এবং আউটপুট চ্যানেল থাকে, যা মেসেজ প্রসেসিং এবং রাউটিং করতে ব্যবহৃত হয়।
Spring Cloud Stream-এ Processor অ্যাপ্লিকেশন তৈরি করার মাধ্যমে আপনি সহজেই ইনপুট মেসেজ গ্রহণ করে সেগুলিকে আউটপুট চ্যানেলে প্রেরণ করতে পারেন।
উদাহরণ:
@EnableBinding(Processor.class) // Processor ইন্টারফেসটি ইনপুট এবং আউটপুট চ্যানেলকে ব্যাবহার করে
public class MessageProcessor {
@StreamListener(Processor.INPUT) // INPUT চ্যানেল থেকে মেসেজ গ্রহণ
@SendTo(Processor.OUTPUT) // OUTPUT চ্যানেলে মেসেজ পাঠানো
public String processMessage(String message) {
return "Processed: " + message; // মেসেজ প্রসেস করা
}
}
এখানে, Processor.INPUT চ্যানেল থেকে মেসেজ গ্রহণ করা হচ্ছে এবং Processor.OUTPUT চ্যানেল দিয়ে প্রসেসড মেসেজ আউটপুট হিসেবে প্রেরণ করা হচ্ছে।
Spring Cloud Stream Example with Kafka
Spring Cloud Stream এর সাথে Kafka ব্যবহার করার একটি উদাহরণ দেখানো হল।
১. Maven Dependency
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
এখানে spring-cloud-starter-stream-kafka ডিপেনডেন্সি Kafka Binder ব্যবহার করার জন্য প্রয়োজনীয় কনফিগারেশন সরবরাহ করে।
২. application.yml Configuration
spring:
cloud:
stream:
bindings:
input:
destination: input-topic
group: my-group
output:
destination: output-topic
binder:
kafka:
type: kafka
environment:
spring:
kafka:
bootstrap-servers: localhost:9092
এখানে, input-topic এবং output-topic দুটি Kafka টপিকের সাথে মেসেজ চ্যানেল যুক্ত করা হয়েছে। spring.kafka.bootstrap-servers দিয়ে Kafka সার্ভারের অবস্থান নির্ধারণ করা হয়েছে।
৩. StreamListener and Processor
@EnableBinding(Processor.class)
public class KafkaProcessor {
@StreamListener(Processor.INPUT) // ইনপুট চ্যানেল থেকে মেসেজ গ্রহণ
@SendTo(Processor.OUTPUT) // আউটপুট চ্যানেলে মেসেজ প্রেরণ
public String process(String message) {
return "Processed Message: " + message;
}
}
এখানে, ইনপুট চ্যানেল থেকে মেসেজ গ্রহণ করা হচ্ছে এবং আউটপুট চ্যানেলে প্রক্রিয়াকৃত মেসেজ পাঠানো হচ্ছে।
সারাংশ
Spring Cloud Stream এর মাধ্যমে মেসেজ-চালিত অ্যাপ্লিকেশন তৈরি করা যায়, যেখানে Message Channel, Binder, এবং Processor হলো মূল উপাদান।
- Message Channel - এটি মেসেজ প্রেরণ এবং গ্রহণ করার জন্য ব্যবহৃত হয়।
- Binder - এটি মেসেজ চ্যানেলকে মেসেজ ব্রোকারের সাথে যুক্ত করার কাজ করে।
- Processor - এটি ইনপুট মেসেজ প্রক্রিয়া করে আউটপুট চ্যানেলে পাঠানোর কাজ করে।
Spring Cloud Stream এবং Kafka বা RabbitMQ এর মতো মেসেজ ব্রোকার ব্যবহার করে ডিস্ট্রিবিউটেড সিস্টেমে মেসেজিং এবং স্ট্রিম প্রসেসিং সহজে করা যায়, যা মাইক্রোসার্ভিস আর্কিটেকচারে কার্যকরী সমাধান প্রদান করে।
Read more